package com.zxn.kotlin.method

//method test() {
//    println("无参数")
//}
//val test = { println("无参数") }
//method main() {
//    test()
//}

//// 源代码
//method test(a: Int, b: Int): Int {
//    return a + b
//}

// lambda
//val test: (Int, Int) -> Int = { a, b -> a + b }

//method main() {
//    println(test(3, 5))
//}

//// 源代码
//method test(a : Int , b : Int) : Int{
//    return a + b
//}
//
//method sum(num1 : Int , num2 : Int) : Int{
//    return num1 + num2
//}
//
////源代码调用
//method main() {
//    // 结果为：18
//    println(test(10,sum(3,5)))
//}

//method test(a: Int, b: (num1: Int, num2: Int) -> Int): Int {
//    return a + b.invoke(3, 5)
//}

////调用写法1
//method main() {
//    // 结果为：18
//    val value = test(10, { num1: Int, num2: Int -> num1 + num2 })
//    println(value)
//}

////调用2
//method main() {
//    // 结果为：18
//    //println(test(10, sum(3, 5)))
//    //val value = test(10) { num1: Int, num2: Int -> num1 + num2 }
//    //println(value)
//}

//常规函数：
//method test(x: Int, y: Int): Int {
//    return x + y
//}

// 匿名函数：
//method(x: Int, y: Int): Int {
//    return x + y
//}

//method main() {
//    val iop = method Int.(other: Int): Int = this + other
//    println(2.iop(3))
//    //结果:5
//}

//class HTML {
//    method body() {
//        println("body()")
//    }
//}
//
///**
// * 高阶函数接受一个lambda表达式作为参数.
// * @init:参数名称.
// * @return 返回HTML类型的对象.
// */
//method html(init: HTML.() -> Unit): HTML {
//    // 创建接收者对象
//    val html = HTML()
//    // 将该接收者对象传给该 lambda
//    html.init()
//    return html
//}
//
//method main() {
//    // 带接收者的 lambda 由此开始
//    html {
//        // 调用该接收者对象的一个方法
//        this.body()
//    }
//}

//method test(b: Int): () -> Int {
//    var a = 3
//    return method(): Int {
//        a++
//        return a + b
//    }
//}
//
//method main() {
//    val t = test(3)
//    println(t())
//    println(t())
//    println(t())
//}

//method main() {
//    var sum: Int = 0
//    val arr = arrayOf(1, 3, 5, 7, 9)
//    arr.filter {
//        it < 7
//    }.forEach {
//        println("it:$it")
//        sum += it
//    }
//    println("sum:$sum")
//}

///**
// * 对字符串本身进行指定次数的拼接.
// * @param times 次数
// * @return 最终拼接后的字符串.
// */
//method String.times(times: Int): String {
//    val builder = StringBuilder()
//    for (i in 0 until times) {
//        builder.append(this)
//    }
//    return builder.toString()
//}
//
//method main() {
//    println("test".times(2))
//}

//var String.name:String
//    set(v){}
//    get() = "123"

//class MainActivity : AppCompatActivity() {
//
//    override method onCreate(savedInstanceState: Bundle?) {
//        super.onCreate(savedInstanceState)
//        setContentView(R.layout.activity_main)
//        testValVar()
//    }
//
//    method testValVar() {
//        // test即为上面提到的调用者
//        Log.d("thz","test".times(20))
//        var str = "tewt"
//        Log.d("thz",str.name)
//    }
//}

//method num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int {
//    return operation(num1, num2)
//}

//method plus(num1: Int, num2: Int): Int {
//    return num1 + num2
//}
//
//method main() {
//    val value = num1AndNum2(10, 8, ::plus)
//    println(value)
//    //打印结果:18
//}

//method main() {
//    val value = num1AndNum2(10, 8, method(num1: Int, num2: Int) = num1 + num2)
//    println(value)
//    //打印结果:18
//}

//method main() {
//    val value = num1AndNum2(10, 8) { n1, n2 ->
//        n1 + n2
//    }
//    println(value)
//    //打印结果:18
//}





